home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Windows Game Programming for Dummies (2nd Edition)
/
WinGamProgFD.iso
/
mac
/
DirectX SDK
/
DXSDK
/
samples
/
Multimedia
/
Misc
/
DXErr
/
dxerr.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
2001-10-31
|
5KB
|
189 lines
//----------------------------------------------------------------------------
// File: DXErr.cpp
//
// Desc: The DXErr sample allows users to enter a numberical HRESULT and get back
// the string match its define. For example, entering 0x8878000a will
// return DSERR_ALLOCATED.
//
// Copyright (c) 1999-2001 Microsoft Corp. All rights reserved.
//-----------------------------------------------------------------------------
#define STRICT
#include <windows.h>
#include <basetsd.h>
#include <dxerr8.h>
#include <tchar.h>
#include "resource.h"
#include "DXUtil.h"
//-----------------------------------------------------------------------------
// Function-prototypes
//-----------------------------------------------------------------------------
INT_PTR CALLBACK MainDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam );
VOID OnInitDialog( HWND hDlg );
VOID LookupValue( HWND hDlg );
//-----------------------------------------------------------------------------
// Defines, constants, and global variables
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// Name: WinMain()
// Desc: Entry point for the application. Since we use a simple dialog for
// user interaction we don't need to pump messages.
//-----------------------------------------------------------------------------
INT APIENTRY WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine,
INT nCmdShow )
{
// Display the main dialog box.
DialogBox( hInst, MAKEINTRESOURCE(IDD_MAIN), NULL, MainDlgProc );
return TRUE;
}
//-----------------------------------------------------------------------------
// Name: MainDlgProc()
// Desc: Handles dialog messages
//-----------------------------------------------------------------------------
INT_PTR CALLBACK MainDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch( msg )
{
case WM_INITDIALOG:
OnInitDialog( hDlg );
break;
case WM_COMMAND:
switch( LOWORD(wParam) )
{
case IDC_LOOKUP:
LookupValue( hDlg );
break;
case IDCANCEL:
EndDialog( hDlg, IDCANCEL );
break;
default:
return FALSE; // Didn't handle message
}
break;
case WM_DESTROY:
break;
default:
return FALSE; // Didn't handle message
}
return TRUE; // Handled message
}
//-----------------------------------------------------------------------------
// Name: OnInitDialog()
// Desc: Initializes the dialogs (sets up UI controls, etc.)
//-----------------------------------------------------------------------------
VOID OnInitDialog( HWND hDlg )
{
// Load the icon
#ifdef _WIN64
HINSTANCE hInst = (HINSTANCE) GetWindowLongPtr( hDlg, GWLP_HINSTANCE );
#else
HINSTANCE hInst = (HINSTANCE) GetWindowLong( hDlg, GWL_HINSTANCE );
#endif
HICON hIcon = LoadIcon( hInst, MAKEINTRESOURCE( IDR_MAINFRAME ) );
// Set the icon for this dialog.
SendMessage( hDlg, WM_SETICON, ICON_BIG, (LPARAM) hIcon ); // Set big icon
SendMessage( hDlg, WM_SETICON, ICON_SMALL, (LPARAM) hIcon ); // Set small icon
SendMessage( hDlg, EM_LIMITTEXT, 20, 0 );
}
//-----------------------------------------------------------------------------
// Name: LookupValue()
// Desc:
//-----------------------------------------------------------------------------
VOID LookupValue( HWND hDlg )
{
HRESULT hrErr = 0;
TCHAR strValue[MAX_PATH];
const TCHAR* strHRESULT;
const TCHAR* strDescription;
TCHAR strHRESULTCopy[MAX_PATH*2];
int nIndex;
int nPower = 0;
int nDigit = 0;
GetDlgItemText( hDlg, IDC_VALUE, strValue, MAX_PATH );
nIndex = lstrlen(strValue) - 1;
// skip whitespace
while( nIndex >= 0 )
{
if( strValue[nIndex] != ' ' &&
strValue[nIndex] != 'L' )
break;
nIndex--;
}
while( nIndex >= 0 )
{
// Convert to uppercase
if( strValue[nIndex] >= 'a' && strValue[nIndex] <= 'z' )
strValue[nIndex] += 'A' - 'a';
if( strValue[nIndex] >= 'A' && strValue[nIndex] <= 'F' )
nDigit = strValue[nIndex] - 'A' + 10;
else if( strValue[nIndex] >= '0' && strValue[nIndex] <= '9' )
nDigit = strValue[nIndex] - '0';
else
break;
hrErr += ( nDigit << (nPower*4) );
nIndex--;
nPower++;
}
// Use DXErr8.lib to lookup HRESULT.
strHRESULT = DXGetErrorString8( hrErr );
_tcscpy( strHRESULTCopy, TEXT("HRESULT: ") );
_tcscat( strHRESULTCopy, strHRESULT );
strDescription = DXGetErrorDescription8( hrErr );
TCHAR* strTemp;
while( strTemp = _tcschr( strHRESULTCopy, '&') )
{
strTemp[0] = '\r';
strTemp[1] = '\n';
}
if( lstrlen(strDescription) > 0 )
{
_tcscat( strHRESULTCopy, TEXT("\r\nDescription: ") );
_tcscat( strHRESULTCopy, strDescription );
}
SetDlgItemText( hDlg, IDC_MESSAGE, strHRESULTCopy );
return;
}